[XEND] xc_save/xc_restore open the libxc interface independently
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Tue, 15 Aug 2006 18:04:43 +0000 (19:04 +0100)
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Tue, 15 Aug 2006 18:04:43 +0000 (19:04 +0100)
of their parent. This is required now that the interface fd is
marked for close-on-exec.
Signed-off-by: Keir Fraser <keir@xensource.com>
tools/python/xen/xend/XendCheckpoint.py
tools/xcutils/xc_restore.c
tools/xcutils/xc_save.c

index d672c8682e001aff0c602b8ac90f641cb1a1bba1..6801f3cd40d6c19a48c73283176d86d05a0cb191 100644 (file)
@@ -78,7 +78,7 @@ def save(fd, dominfo, network, live, dst):
         # enabled. Passing "0" simply uses the defaults compiled into
         # libxenguest; see the comments and/or code in xc_linux_save() for
         # more information.
-        cmd = [xen.util.auxbin.pathTo(XC_SAVE), str(xc.handle()), str(fd),
+        cmd = [xen.util.auxbin.pathTo(XC_SAVE), str(fd),
                str(dominfo.getDomid()), "0", "0", str(int(live)) ]
         log.debug("[xc_save]: %s", string.join(cmd))
 
@@ -150,7 +150,7 @@ def restore(xd, fd):
         balloon.free(xc.pages_to_kib(nr_pfns))
 
         cmd = map(str, [xen.util.auxbin.pathTo(XC_RESTORE),
-                        xc.handle(), fd, dominfo.getDomid(), nr_pfns,
+                        fd, dominfo.getDomid(), nr_pfns,
                         store_port, console_port])
         log.debug("[xc_restore]: %s", string.join(cmd))
 
index c94dbd3bbeb43647341c6145f1846f737a31c1b0..c8b2b893316a4db37d2267c8dc94c0de931e910c 100644 (file)
@@ -12,6 +12,7 @@
 #include <stdint.h>
 #include <stdio.h>
 
+#include <xenctrl.h>
 #include <xenguest.h>
 
 int
@@ -21,17 +22,20 @@ main(int argc, char **argv)
     int ret;
     unsigned long store_mfn, console_mfn;
 
-    if (argc != 7)
+    if (argc != 6)
        errx(1,
-            "usage: %s xcfd iofd domid nr_pfns store_evtchn console_evtchn",
+            "usage: %s iofd domid nr_pfns store_evtchn console_evtchn",
             argv[0]);
 
-    xc_fd = atoi(argv[1]);
-    io_fd = atoi(argv[2]);
-    domid = atoi(argv[3]);
-    nr_pfns = atoi(argv[4]);
-    store_evtchn = atoi(argv[5]);
-    console_evtchn = atoi(argv[6]);
+    xc_fd = xc_interface_open();
+    if (xc_fd < 0)
+        errx(1, "failed to open control interface");
+
+    io_fd = atoi(argv[1]);
+    domid = atoi(argv[2]);
+    nr_pfns = atoi(argv[3]);
+    store_evtchn = atoi(argv[4]);
+    console_evtchn = atoi(argv[5]);
 
     ret = xc_linux_restore(xc_fd, io_fd, domid, nr_pfns, store_evtchn,
                           &store_mfn, console_evtchn, &console_mfn);
@@ -40,5 +44,8 @@ main(int argc, char **argv)
        printf("console-mfn %li\n", console_mfn);
        fflush(stdout);
     }
+
+    xc_interface_close(xc_fd);
+
     return ret;
 }
index 44c470137946127c766845a00d39c0e2fbd8665b..c9be3454d4147c878c939558292dcdfb0be90f1e 100644 (file)
@@ -13,9 +13,9 @@
 #include <string.h>
 #include <stdio.h>
 
+#include <xenctrl.h>
 #include <xenguest.h>
 
-
 /**
  * Issue a suspend request through stdout, and receive the acknowledgement
  * from stdin.  This is handled by XendCheckpoint in the Python layer.
@@ -36,16 +36,24 @@ int
 main(int argc, char **argv)
 {
     unsigned int xc_fd, io_fd, domid, maxit, max_f, flags; 
+    int ret;
+
+    if (argc != 6)
+       errx(1, "usage: %s iofd domid maxit maxf flags", argv[0]);
+
+    xc_fd = xc_interface_open();
+    if (xc_fd < 0)
+        errx(1, "failed to open control interface");
+
+    io_fd = atoi(argv[1]);
+    domid = atoi(argv[2]);
+    maxit = atoi(argv[3]);
+    max_f = atoi(argv[4]);
+    flags = atoi(argv[5]);
 
-    if (argc != 7)
-       errx(1, "usage: %s xcfd iofd domid maxit maxf flags", argv[0]);
+    ret = xc_linux_save(xc_fd, io_fd, domid, maxit, max_f, flags, &suspend);
 
-    xc_fd = atoi(argv[1]);
-    io_fd = atoi(argv[2]);
-    domid = atoi(argv[3]);
-    maxit = atoi(argv[4]);
-    max_f = atoi(argv[5]);
-    flags = atoi(argv[6]);
+    xc_interface_close(xc_fd);
 
-    return xc_linux_save(xc_fd, io_fd, domid, maxit, max_f, flags, &suspend);
+    return ret;
 }